package com.zzs.common.redis.service;

import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @author zzs
 * @date 2025/03/17
 */
public interface RedisService {
    boolean hasKey(String key);

    Long getExpire(String key, TimeUnit unit);

    void expire(String key, long timeout, TimeUnit unit);

    <T> void saveValue(String key, T value);

    <V> void saveValue(Map<String, V> values);

    <T> void saveValue(String key, T value, long timeout, TimeUnit unit);

    <T> T getValue(String key, Class<T> clazz);

    <T> List<T> listValues(List<String> keys, Class<T> clazz);

    boolean removeKey(String key);

    void increment(String key);

    <T> void rightPushForList(String key, T value);

    <T> void removeFromList(String key, T value);

    <T> void saveForZset(String key, T value, double score);

    <V> void saveForZset(String key, Map<V, Double> valueScoreMap);

    <T> void removeFromZset(String key, T value);

    <T> List<T> listValuesFromZset(String key, long start, long end, Class<T> clazz);

    long getSizeForZset(String key);

    <T> Long getRankFromZSet(String key, T value);
}
